<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>

// Promise 承诺
// Promise是ES6对异步编程提供的一种解决方案
// Promise是一个容器，里面放着将来完成的异步任务
// Promise是一个构造函数，用于创建Promise对象

// Promise有三种状态：
// 1.pending 进行中状态
// 2.rejected 失败状态
// 3.fulfilled 成功状态

// Promise的状态改变：
// 1.从 pending 改变为 rejected
// 2.从 pending 改变为 fulfilled

// 创建Promise对象，必须传入一个函数作为实参
// let p1 = new Promise(function (){// excutor执行器函数，同步执行

// });
let p1 = new Promise((resolve,reject)=>{// excutor执行器函数，同步执行
    console.log( '执行器函数被调用。。。' );

    // 1.在执行器函数内部不执行任何改变状态的操作
    
    // 当Promise函数被调用时，内部会调用执行器函数
    // 执行器函数被调用时，传入两个函数作为实参
    // console.log( resolve );// 是一个函数
    // console.log( reject );// 是一个函数
    // resolve函数的作用：将Promise实例对象的状态改变为成功
    // reject函数的作用：将Promise实例对象的状态改变为失败

    // 2.执行resolve函数
    // resolve();

    // 3.执行reject函数
    reject();
});

// 1.p1为进行中状态，结果为undefined
// console.log( p1 );// Promise {<pending>: undefined}

// 2.p1为成功状态，结果为undefined
// console.log( p1 );// Promise {<fulfilled>: undefined}

// 3.p1为失败状态，结果为undefined
console.log( p1 );// Promise {<rejected>: undefined}


// 模拟Promise函数实现
function Promise(excutor){
    function resolve(){

    }
    function reject(){

    }
    // 调用执行器函数
    excutor(resolve,reject);
}
// let p1 = new Promise((resolve,reject)=>{// excutor
//     resolve 是一个函数
//     reject 是一个函数
// });
</script>
</body>
</html>